#include <iostream>
using namespace std;

template<typename T1, typename T2>
class A {
public:
    A() { cout << "主模板：A<T1, T2>" << endl; }
private:
    T1 n;
    T2 m;
};

template<typename T1, typename T2>
class A<T1*, T2*>
{
public:
	A() { cout << "偏特化：A<T1*, T2*>" << endl; }
private:
	T1 n;
	T2 m;
};

template<typename T1, typename T2>
class A<T1*, T2>
{
public:
	A() { cout << "偏特化：A<T1*, T2>" << endl; }
private:
	T1 n;
	T2 m;
};

template<>
class A<int, double>
{
public:
	A() { cout << "全特化：int, double" << endl; }
private:
	int n;
	double m;
};

int main()
{
    A<int, int> a1;
    A<int*, int*> a2;
    A<int*, int> a3;
    A<int, double> a4;
    return 0;
}